﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using FlexFlow.Model;

namespace FlexFlow.Base.Interface
{
    /// <summary>
    /// 为组织机构提供器提供接口
    /// </summary>
    public interface IOrganizeProvider : IPhysicalEntityProvider<Organization>
    {
        /// <summary>
        /// 取得组织机构列表
        /// </summary>
        /// <param name="parentOrganize">
        /// 要取得的组织机构的父级列表
        /// </param>
        /// <returns>
        /// 取得的组织机构列表
        /// </returns>
        List<Organization> GetList(Guid? parentOrganize = null);
        /// <summary>
        /// 重新设置指定组织机构的父组织机构Id
        /// </summary>
        /// <param name="orgId">
        /// 要设置的组织机构ID
        /// </param>
        /// <param name="parId">
        /// 要设置的父组织机构ID
        /// </param>
        /// <returns>
        /// 一个表示是否设置成功的值
        /// </returns>
        bool SetParent(Guid orgId, Guid? parId);
        /// <summary>
        /// 重命名指定组织机构
        /// </summary>
        /// <param name="orgId">
        /// 要重命名的组织机构Id
        /// </param>
        /// <param name="newName">
        /// 要重命名的组织机构的新名称
        /// </param>
        /// <returns>
        /// 一个表示是否重命名成功的值
        /// </returns>
        bool Rename(Guid orgId, string newName);
        /// <summary>
        /// 更新指定组织机构的信息
        /// </summary>
        /// <param name="orgId">
        /// 组织机构ID
        /// </param>
        /// <param name="name">
        /// 组织机构名称
        /// </param>
        /// <param name="type">
        /// 组织机构类型
        /// </param>
        /// <param name="leader">
        /// 组织机构领导
        /// </param>
        /// <param name="chargeLeader">
        /// 组织机构分管领导
        /// </param>
        /// <param name="locked">
        /// 组织机构是否被锁定
        /// </param>
        /// <returns>
        /// 更新结果
        /// </returns>
        bool Update(Guid orgId, string name = null, string type = null, string leader = null, string chargeLeader = null, bool? locked = null);
        /// <summary>
        /// 查询名称中包含指定字符的组织机构集合
        /// </summary>
        /// <param name="nameLike">
        /// 要查询的组织机构名称
        /// </param>
        /// <param name="skip">
        /// 返回数据的起始位置
        /// </param>
        /// <param name="limit">
        /// 限制数量
        /// </param>
        /// <returns>
        /// 查询结果
        /// </returns>
        List<Organization> QueryByName(string nameLike, int skip = 0, int limit = 5);
    }
}
